import time
from time import sleep
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.support.ui import WebDriverWait
"""
expected_conditions：显示等待依赖，如果没有找到元素则抛出异常
WebDriverWait：显示等待依赖，在规定的秒数内频繁的查找元素
"""
driver = webdriver.Chrome()
driver.implicitly_wait(15) # 隐式等待
# 在5秒内不断检测元素是否出现，出现就结束等待，执行下一步。如果5秒内没有出现就抛出异常
# 隐式等待是作用在全局的，一般放在setup中
# 隐式等待有一个缺点：因为隐式等待是针对全局的元素而言的，而每个元素的加载时间是不一样的。所以隐式等待的等待时间是不能很好的兼容所有元素。
# 使用隐式等待会有这个bug，就是元素已经出现，但不能被点击。所以导致用例失败。这是因为浏览器加载时，会先加载DOM节点，然后再加载js等静态文件，所以会出现元素已经出现，但无法点击的问题。
driver.get("http://www.baidu.com")
driver.maximize_window() # 全屏
# 通过ID定位输入框，输入王长帅
# driver.find_element(By.ID,"kw").send_keys("王长帅")
WebDriverWait(driver,10,0.5).until(EC.presence_of_element_located((By.ID,"kw"))).send_keys("王长帅") # presence_of_element_located 唯一元素用这个
# 显示等待里面只会接收一个参数值，所以需要用元组的方式传递
# 总时长10秒，每隔0.5秒寻找一次，找到则停下，如果超过10s没找到，则抛出异常
# 通过xpath点击定位
# driver.find_element(By.XPATH,"//*[@id='su']").click()
# 通过显示等待，找到TAG NAME 一组元素中第九个
WebDriverWait(driver,10,0.5).until(EC.presence_of_all_elements_located((By.TAG_NAME,'input')))[8].click()
# 通过xpath点击第一个搜索结果
driver.find_element(By.XPATH,"//*[@id='1']/div/div[1]/h3/a").click()
win = driver.window_handles # 获取全部的句柄
driver.switch_to.window(win[-1]) # 切换列表最后一个的句柄进入
# 通过ID ，定位到 爱企查的输入框
input = driver.find_element(By.ID,"aqc-header-search-input")
# 先清除文本内容
input.clear()
# 再输入内容
input.send_keys("王长帅榴莲公司")
# 通过class  点击搜索按钮
driver.find_element(By.CLASS_NAME,"search-btn").click()
# 断言是否用例通过
# step1：获取断言的文本信息
text_result = driver.find_element(By.CLASS_NAME,"text-one").text
assert text_result == "抱歉，没有找到相关结果…"
# 获取浏览器title
print(driver.title)
# 退出浏览器
driver.quit()


# 强制等待
# time.sleep(3) #代码运行到此，强制等待3s
